﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CodeGenerator.Dialog
{
    public partial class HelpDialog : Form
    {
        public HelpDialog()
        {
            InitializeComponent();
            tplJsonText.Text = @"
{
    ""version"": 1,
    ""name"": ""模板名称"",
    ""templates"": [
        {
            ""name"": ""模板项目1"",
            ""path"": ""模板相对路径，基于template.json所在文件夹""
        },
        {
            ""name"": ""模板项目2"",
            ""path"": ""模板相对路径，基于template.json所在文件夹""
        },
    ],
    //可动态生成控件，支持Input、Select、Checkbox部分属性
    ""extra"":[
    	{
			""type"":""checkbox"",
			""name"":""a"",
			""default"":false,
			""text"":""测试""
		},
		{
			""type"":""input"",
			""name"":""b"",
			""default"":"""",
			""prefix"":""input"",
			""placeholder"":"""",
			""rule"":"""",//正则表达式
			""errMsg"":"""",//验证失败时的错误提示信息
			""required"":false,//是否必须
		},
		{
			""type"":""select"",
			""name"":""c"",
			""default"":"""",
			""prefix"":""select"",
			""placeholder"":"""",
			""values"":[""a"",""b"",""c""],
			""required"":false,
		}
    ]
}";

            modelText.Text = @"
//工具类
@using CodeGenerator.Utils;
//数据库信息接口
@using CodeGenerator.DBInfo;
@using CodeGenerator.DBInfo.entity;
@{
	//表信息
    var tableInfo = Model.TableInfo;
	string tableComment = tableInfo.Comment;
	tableComment = tableComment.IsNullOrEmpty()?tableInfo.Name:tableComment;
	List<ColumnInfo> columns = tableInfo.Columns;
    //数据库信息帮助类
	IDBInfoGetter dBInfoGetter = Model.DBInfoGetter;
    //Java基础包名
	var basePkgName = Model.BasePkgName;
	var package = basePkgName + "".entity"";
	var entityName = (tableInfo.Name as string).ToBigCamelCase();
    var time = DateTime.Now.ToString(""yyyy-MM-dd HH:mm:ss"");
    //若模板添加了自定义控件则可从这里获取控件值，如extraVars[""a""]获取name为a的控件值 
    var extraVars = Model.ExtraVars;
}
//IDBInfoGetter 数据库信息接口 包含以下可用方法：
//GetJavaType(ColumnInfo column) 获取字段对应Java类型
//GetJavaScriptType(ColumnInfo column) 获取字段对应JavaScript类型

//tableInfo 包含字段
//去除前缀后的表名
//tableInfo.Name
//表注释
//tableInfo.Comment
//表主键数量
//tableInfo.PrimaryKeyCount
//表字段信息，是一个List,类型为ColumnInfo
//var columns = tableInfo.Columns

//ColumnInfo类型字段如下：
//Name 字段名
//Type 字段类型
//IsPrimaryKey 是否主键
//IsAllowNull 是否可空
//Comment 字段注释
//NumLength 数字类型时可用，数字长度
//NumScale 数字类型时可用，小数位数

//对字符串进行了功能扩展，可用以下方法

//IsLowerCamelFirstLongEnough() 判断小驼峰首单词字母数量是否大于1，如果不是小驼峰返回false
//ToSmallCamelCase() 将字符串转换为小驼峰命名法。
//ToBigCamelCase() 将字符串转换为大驼峰命名法。
//UpperFirst() 将字符串首字母转换为大写。
//LowerFirst() 将字符串首字母转换为小写。
//IsNullOrEmpty() 检查字符串是否为 null 或空字符串。
//IsJavaPackageName() 检查字符串是否符合 Java 包名规范。
//IsNotNullAndNotEmpty() 检查字符串是否不为 null 且不为空字符串。
//FirstWord() 返回该字符串的第一个被隔断的词组，如“hello 123”返回“hello”，“hello(123)”也返回“hello”。
";
        }
    }
}
